#ifndef __VTOR_MODBUS_DATATYPE_H__
#define __VTOR_MODBUS_DATATYPE_H__

#ifdef __cplusplus
extern "C" {
#endif

#include "vtor_elec_module_config.h"

#ifdef __VTOR_MODBUS__

#define VTOR_MODBUS_FUNCTION_READ_HOLDING_REGISTER		0x03
#define VTOR_MODBUS_FUNCTION_READ_INPUT_REGISTER		0x04
#define VTOR_MODBUS_FUNCTION_WRITE_SINGLE_REGISTER		0x06
#define VTOR_MODBUS_FUNCTION_WRITE_MULTIPLE_REGISTER	0x10
	
// 主机请求读（保持和输入）寄存器
// 从机响应读（保持和输入）寄存器
	
// 主机请求写单个输入寄存器 暂时不用，因为多个包含单个
// 从机响应写单个输入寄存器 暂时不用
	
// 主机请求写多个输入寄存器
// 从机响应写多个输入寄存器

// 读寄存器请求帧
typedef struct VtorModbusRequestReadRegisterFrame
{
	uint8_t id;
	uint8_t cmd;
	uint16_t regAddr;
	uint16_t regNum;
	uint16_t crc;
}VtorModbusRequestReadRegisterFrameStruct;

// 读寄存器返回帧
typedef struct VtorModbusReplyReadRegisterFrame
{
	uint8_t id;
	uint8_t cmd;
	uint8_t byteNum;
	uint16_t regData[0x80]; // 包含crc
}VtorModbusReplyReadRegisterFrameStruct;

// 写多个寄存器请求帧
typedef struct VtorModbusRequestWriteMultiInputRegisterFrame
{
	uint8_t id;
	uint8_t cmd;
	uint16_t regAddr;
	uint16_t regNum;
	uint8_t byteNum;
	uint16_t regData[0x80]; // 包含crc
}VtorModbusRequestWriteMultiInputRegisterFrameStruct;

// 写多个寄存器返回帧
typedef struct VtorModbusReplyWriteMultiInputRegisterFrame
{
	uint8_t id;
	uint8_t cmd;
	uint16_t regAddr;
	uint16_t regNum;
	uint16_t crc;
}VtorModbusReplyWriteMultiInputRegisterFrameStruct;

#endif // __VTOR_MODBUS__

#ifdef __cplusplus
}
#endif

#endif

